package xyz.icxl.android.architecture.receiver

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData

/**
 * 文件描述：Token过期的助手
 *
 * 文件创建人：cxl
 *
 * 创建时间：2024 年 8月 2 日
 *
 * 文件版本：v2.0
 *
 * 版本描述：以前是广播方案，现在替换成 LiveData 方案
 */
class TokenMissHelper private constructor() {
    // 私有的MutableLiveData，用于存储Token过期状态
    private val _tokenMiss = MutableLiveData<Boolean>()

    // 公开的LiveData，只读，用于观察Token过期状态
    private val tokenMiss: LiveData<Boolean> get() = _tokenMiss

    companion object {
        private var instance: TokenMissHelper? = null
        fun getInstance(): TokenMissHelper {
            return instance ?: synchronized(this) {
                instance ?: TokenMissHelper().also { instance = it }
            }
        }
    }

    /** 发送Token过期消息，设置_tokenMiss的值为true */
    fun sendTokenMiss() {
        _tokenMiss.value = true
    }

    /** 观察Token过期消息，当_tokenMiss的值为true时，执行[onMiss] */
    fun observe(owner: LifecycleOwner, onMiss: () -> Unit) {
        tokenMiss.observe(owner) { isMissed ->
            if (isMissed == true) {
                onMiss()
            }
        }
    }
}